/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package client.controleur;

import Exceptions.InputAnnuiteException;
import Exceptions.InputChoixException;
import Exceptions.InputMontantException;
import Exceptions.InputNbAnException;
import Exceptions.InputTxInteretException;
import client.modele.InterfaceModele;
import exception.ReadingObjectException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Locale;
import java.util.ResourceBundle;
import client.vue.VueCalculPret;
import exception.CommunicationResponseApplicationException;

/**
 *
 * @author Florian
 */
public class ApplicationControler implements ActionListener {

    private InterfaceModele modele;
    private VueCalculPret vue;

    public ApplicationControler(VueCalculPret vue, InterfaceModele modele) {
        this.modele = modele;
        this.vue = vue;
    }

    public void execute() {
        //Au lancement de l'application client, on affiche la vue.
        vue.setVisible(true);
        vue.setChoixCalculAnnuite();
    }

    public void actionPerformed(ActionEvent ae) {
        //Appui sur le bouton ok
        if (ae.getActionCommand().equals(VueCalculPret.BTN_CALCULER)) {
            int choix;
            ResourceBundle resourceBundle = vue.getBundle();
            if (vue.getTextChoix().equals(VueCalculPret.BTN_ANNUITE)) {
                choix = 1;
            } else {
                choix = 2;
            }
            double montant, txInterets, annuite, reponse;
            int nbAnnuite;
            try {
                switch (choix) {
                    case 1:
                        montant = Double.parseDouble(vue.getTextMontant());
                        nbAnnuite = Integer.parseInt(vue.getTextNbAnnuite());
                        txInterets = Double.parseDouble(vue.getTextTxInterets());

                        //Envoi des informations au modèle
                        reponse = modele.envoyerDemandeAnnuites(montant, txInterets, nbAnnuite);
                        vue.afficherResultatAnnuite(reponse);
                        break;
                    case 2:
                        annuite = Double.parseDouble(vue.getTextAnnuite());
                        txInterets = Double.parseDouble(vue.getTextTxInterets());
                        montant = Double.parseDouble(vue.getTextMontant());

                        //Envoi des informations au modèle
                        reponse = modele.envoyerDemandeNbAnnees(montant, txInterets, annuite);
                        vue.afficherResultatNbAnnees(reponse);
                        break;
                    default:
                        throw new InputChoixException();
                }
            } catch (NumberFormatException ex) {
                vue.afficherMsgErreur(resourceBundle.getString("error_format"));
            } catch (CommunicationResponseApplicationException ce) {
                vue.afficherMsgErreur(resourceBundle.getString("error_com"));
            } catch (ReadingObjectException roe) {
                vue.afficherMsgErreur(resourceBundle.getString("error_read"));
            } catch (InputChoixException ipe) {
                vue.afficherMsgErreur(resourceBundle.getString("error_choice"));
            } catch (InputMontantException ime) {
                vue.afficherMsgErreur(resourceBundle.getString("error_amount"));
            } catch (InputNbAnException inbae) {
                vue.afficherMsgErreur(resourceBundle.getString("error_nb_annuity"));
            } catch (InputAnnuiteException iae) {
                vue.afficherMsgErreur(resourceBundle.getString("error_annuity"));
            } catch (InputTxInteretException itxe) {
                vue.afficherMsgErreur(resourceBundle.getString("error_interest_rate"));
            } catch (RuntimeException rte){
                vue.afficherMsgErreur(resourceBundle.getString("error_runtime"));
            }
        } else if (ae.getActionCommand().equals(VueCalculPret.MENU_FRANCAIS)) {
            vue.setLangueApplication(Locale.FRANCE);
        } else if (ae.getActionCommand().equals(VueCalculPret.MENU_ANGLAIS)) {
            vue.setLangueApplication(Locale.UK);
        } else if (ae.getActionCommand().equals(VueCalculPret.MENU_QUITTER)) {
            System.exit(0);
        } else if (ae.getActionCommand().equals(VueCalculPret.BTN_ANNUITE)) {
            vue.setChoixCalculAnnuite();
        } else if (ae.getActionCommand().equals(VueCalculPret.BTN_NBANNEES)) {
            vue.setChoixCalculNbAnnees();
        }
    }
}
